pub fn dp_rec_mc(amount: u32) -> u32 {
    // 可用的币种
    let coins = vec![1, 2, 5, 10, 20, 30, 50, 100];
    
    // dp[i] 表示组成金额 i 的最小纸币数
    let mut dp = vec![u32::MAX; (amount + 1) as usize];
    
    // 初始条件：dp[0] = 0，金额为 0 时不需要任何纸币
    dp[0] = 0;
    
    // 动态规划填充 dp 数组
    for i in 1..=amount {
        for &coin in &coins {
            if i >= coin {
                dp[i as usize] = dp[i as usize].min(dp[(i - coin) as usize] + 1);
            }
        }
    }
    
    // 返回组成给定金额所需的最小纸币数
    dp[amount as usize]
}
